Thrift API and Filter Language

    Filter Language是在HBase0.92之后引入的。它实现了在服务器端执行过滤当访问HBase通过Thrift或在Hbase shell中。

    下面是一种简单的表达:

    以下语法规则需要记住:

    • 指定筛选器的名称,后跟括号中的逗号分隔的参数列表
    • 如果参数代表字符串,它应该用单引号“ ‘ ”
    • 代表布尔、整型或比较操作符的参数不应该用引号
    • 参数可以是任意 ASCII 字符。如果单引号代表参数,必须使用额外的单引号来转义

    82.2 复合过滤器和操作

    双目运算符

    If the AND operator is used, the key-value must satisfy both filters.

    OR

    If the OR operator is used, the key-value must satisfy at least one of the filters.

    单目运算符
    SKIP

    For a particular row, if any of the key-values fail the filter condition, the entire row is skipped.

    For a particular row, key-values will be emitted until a key-value is reached that fails the filter condition.

    Example 44. Compound Operators

    可以组合多个运算符,创建过滤器的层次结构,如:

    1. 圆括号有最高优先级

    2. 其次是单目运算符SKIP and WHILE二者具有相同优先级.

    3. 再之后是 AND 以及OR.

    Example 45. Precedence Example

    可以使用圆括号显式地控制执行优先级.

    82.4. Compare Operator

    提供了下面这些比较运算符:

    1. LESS (<)

    2. LESS_OR_EQUAL (⇐)

    3. EQUAL (=)

    4. NOT_EQUAL (!=)

    5. GREATER (>)

    客户端使用(<, ⇐, =, !=, >, >=)这些符号来表达比较操作。

    比较器是下面任意一种:

    1. BinaryComparator - 使用Bytes.compareTo(byte[], byte[])与特定的字节数组

    2. BinaryPrefixComparator - 与特定的字节数组比较,只比较字节数组的长度.

    3. RegexStringComparator - 与指定的字节数组使用给定的正则表达式比较. 只使用EQUAL 和 NOT_EQUAL

    4. SubStringComparator - 检测特定的字符串是否出现在字节数组中,不区分大小写 只有EQUAL和EQUAL 可用

    比较器的一般语法是:

    不同比较器类型如下:

    1. BinaryComparator - binary

    2. BinaryPrefixComparator - binaryprefix

    3. RegexStringComparator - regexstring

    4. SubStringComparator - substring

    ComparatorValue 可以是任意值

    ComparatorValues举例
    1. binary:abc 将匹配比”abc”大的任意值

    2. binaryprefix:abc将匹配首字母为 “abc”的任意值

    3. substring:abc123 匹配以子串 “abc123”开始的任意串

    82.6. Example PHP Client Program that uses the Filter Language

    KeyOnlyFilter

    这个过滤器不带任何参数。它只返回每个键值的关键组件

    FirstKeyOnlyFilter

    这个过滤器不带任何参数。它返回每行的第一个键值

    PrefixFilter

    该过滤器只需要一个参数 – 行键的前缀. 它仅返回从指定的行前缀开始的行中存在的这些键值

    ColumnPrefixFilter

    这个过滤器只需要一个参数– 列前缀. 它仅返回从指定列前缀开始的列中存在的这些键值. 列前缀必须为如下形式 .

    MultipleColumnPrefixFilter

    该过滤器采用列前缀表为参数。返回以表中任一列前缀开头的列,每个列前缀为以下形式: “qualifier”.

    ColumnCountGetFilter

    参数为 – limit. 返回表中列的第一个限制数.

    PageFilter

    参数为 – page size. 它从表中返回页大小的行数

    ColumnPaginationFilter

    参数为 – limit 和 offset. 返回列偏移之后的列限制数,对所有行有效.

    InclusiveStopFilter

    参数为– 停止扫描的行键. 它返回行中的所有关键值,包括指定行.

    TimeStampsFilter

    时间戳表为参数. 返回匹配时间戳表的那些键值.

    RowFilter

    该筛选器需要比较运算符和比较器.它使用比较运算符将每个行键与比较器进行比较,如果比较返回true,则返回该行中的所有键值

    Family Filter

    该筛选器需要比较运算符和比较器.它使用比较运算符将每个列族名与比较器进行比较,如果返回真将返回该列族的所有cells.

    QualifierFilter

    该筛选器需要比较运算符和比较器。它使用比较运算符将每个qualifier名与比较器进行比较,如果为真,返回那列中的所有键值.

    ValueFilter

    该筛选器需要比较运算符和比较器。使用比较运算符将每个值与比较器进行比较,如果结果为真,返回键值

    DependentColumnFilter

    需要两个参数 – 一个family一个qualifier. 它试图在每一行找到具有相同的时间戳的列,返回所有关键值。如果这行不包含特定的列,这行将不返回行键.

    SingleColumnValueFilter

    该过滤器需要列族,qualifier,比较运算符和比较器.如果指定的列没有找到,那行所有的列都释放。如果找到,将返回真,行的所有列将被释放。

    SingleColumnValueExcludeFilter
    ColumnRangeFilter

    这个过滤器用来选出位于mincolumn和maxcolumn之间的那些键。它也需要两个布尔变量来表示是否包括mincolumn和maxcolumn或没有。